package com.wjp.dinosaur.util;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils {

    // 加密盐
    private static final String jwtToken = "123456wjp!@#$$";

    /**
     * 创建token
     * @param userId
     * @return
     */
    public static String createToken(Long userId){
        Map<String,Object> claims = new HashMap<>();
        claims.put("userId",userId);
        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, jwtToken)   // 签发算法，密钥为jwtToken
                .setClaims(claims)  // body数据，要唯一，自行设置
                .setIssuedAt(new Date())    // 设置签发时间、
                .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000));// 一天的有效时间

        String token = jwtBuilder.compact();
        return token;
    }

    /**
     * 验证token
     * @param token
     * @return
     */
    public static Map<String,Object> checkToken(String token){
        try{
            Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
            return (Map<String, Object>) parse.getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Token的解密
     * @param token 加密后的token
     * @return
     */
    public static Claims parseJWT(String token) {
        //得到DefaultJwtParser
        Claims claims = Jwts.parser()
                //设置签名的秘钥
                .setSigningKey(jwtToken)
                //设置需要解析的jwt
                .parseClaimsJws(token).getBody();
        return claims;
    }
}